#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*************************************************************
*	文件名：ReadFile.c
*	内容摘要：实现对trace文件的读取
*	作者:周杰
*	完成时间：2017-9-？
*	内容说明：具体函数声明在ReadFile.h中，主函数需包含该头文件
*******************************************************************/
// 重定义数据类型
typedef signed   int    INT32;
typedef unsigned int    UINT32;
typedef unsigned char   UINT8;

//关键宏定义
#define MAX_RECORD_LEN     200     // 每条数据的最大长度

//函数说明
//该函数完成对文件逐行的扫描阅读
INT32 ReadRecordFromFile(FILE *fp, UINT8 szRecordSet[]);


//函数实体定义
/**********************************************************************
* 功能描述：从文件中读取记录内容
* 输入参数：fp-文件指针
* 输出参数：szRecordSet-记录内容信息集
            piReadCnt-读取到的条数
* 返 回 值：0-读取成功下一轮继续  1-文件读取结束  -1-读取失败
* 其它说明：无
* 修改日期        版本号         修改人           修改内容
* -------------------------------------------------------------------
* 20170910        V1.0     Zhoujie			        创建
***********************************************************************/
INT32 ReadRecordFromFile(FILE *fp, UINT8 szRecordSet[])
{
	UINT8  szRecordInfo[MAX_RECORD_LEN] = {0};    // 存储读取到的每条记录信息
	UINT32 iRecordLen                   = 0;      // 存储读取到的每条记录信息的长度
	if (fp==NULL)
	{
		printf("ReadRecordFromFile: input paramter(s) is NULL!\n");
		return -1;
	}
	//读取文件
	if ((!feof(fp)) && (!ferror(fp)))   // 遇到文件结尾或读取错误则退出
	{
		//重置szRecordInfo的内存空间，读取fp指向当前行的内容
		memset(szRecordInfo,0x00,sizeof(szRecordInfo));
		fgets(szRecordInfo,sizeof(szRecordInfo)-1,fp);
		// 去掉记录后面的回车换行符
		iRecordLen = strlen(szRecordInfo);
        while (iRecordLen > 0)
        {
            if (szRecordInfo[iRecordLen-1] == '\n' || szRecordInfo[iRecordLen-1] == '\r')
            {
                szRecordInfo[iRecordLen-1] = '\0';
                break;
            }
            iRecordLen --;
        }
        //拷贝输出的字符
        strncpy(szRecordSet, szRecordInfo, MAX_RECORD_LEN-1);
        return 0;
	}else{
		//结束输出
		if(feof(fp))
		{
			printf("the file is real all!\n");
			return 1;
		}else
		{//读取错误输出调试信息
			printf("the read operation error!\n");
			return -1;
		}

	}
}


